import request from '@/utils/request'

// 获取菜品推荐列表 (UPICF算法)
export function getDishRecommend(userId) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: `http://localhost:8000/recommend/${userId}`,
      method: 'GET',
      timeout: 50000,
      success: (res) => {
        console.log('📊 UPICF API原始响应:', res)
        if (res.statusCode === 200) {
          resolve(res.data)
        } else {
          reject(new Error(`API错误: ${res.statusCode}`))
        }
      },
      fail: (err) => {
        console.error('📊 UPICF API调用失败:', err)
        reject(err)
      }
    })
  })
}

// 混合推荐系统 (完整流程)
export function getHybridRecommendation(userId) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: `http://localhost:8000/hybrid/${userId}`,
      method: 'GET',
      timeout: 50000,
      success: (res) => {
        console.log('🎯 混合推荐API原始响应:', res)
        if (res.statusCode === 200) {
          resolve(res.data)
        } else {
          reject(new Error(`API错误: ${res.statusCode}`))
        }
      },
      fail: (err) => {
        console.error('🎯 混合推荐API调用失败:', err)
        reject(err)
      }
    })
  })
}

// 收藏/取消收藏菜品 - 修复参数传递问题
export function toggleFavorite(dishId, userId = 100) {
  console.log('🔗 toggleFavorite API调用参数:')
  console.log('  - dishId:', dishId)
  console.log('  - userId:', userId)
  
  return new Promise((resolve, reject) => {
    // 确保参数有效
    if (!dishId || isNaN(dishId)) {
      reject(new Error('菜品ID无效'))
      return
    }
    if (!userId || userId === 'undefined' || isNaN(userId)) {
      userId = 100
    }
    
    const requestData = { dishId: Number(dishId), userId: Number(userId) }
    console.log('📤 发送请求数据:', requestData)
    
    uni.request({
      url: 'http://localhost:8080/diet/favorite',
      method: 'POST',
      data: requestData,
      header: {
        'Content-Type': 'application/json'
      },
      timeout: 10000,
      success: (res) => {
        console.log('📥 收藏API原始响应:', res)
        if (res.statusCode === 200 && res.data.code === 200) {
          console.log('✅ 收藏操作成功，当前状态:', res.data.data?.isFavorited)
          resolve(res.data)
        } else {
          console.log('⚠️ 收藏操作失败:', res.data)
          reject(new Error(res.data.msg || '收藏操作失败'))
        }
      },
      fail: (err) => {
        console.error('❌ 收藏API网络请求失败:', err)
        reject(err)
      }
    })
  })
}

// 获取我的收藏列表
export function getFavoriteList(userId, pageNum = 1, pageSize = 10) {
  console.log('📋 获取收藏列表API调用:', { userId, pageNum, pageSize })
  
  return new Promise((resolve, reject) => {
    if (!userId || typeof userId === 'object' || isNaN(userId)) {
      userId = 100
    }
    
    const url = `http://localhost:8080/diet/favorites/${Number(userId)}?pageNum=${pageNum}&pageSize=${pageSize}`
    console.log('🔗 请求URL:', url)
    
    uni.request({
      url: url,
      method: 'GET',
      header: {
        'Content-Type': 'application/json'
      },
      success: (res) => {
        console.log('📥 收藏列表API响应:', res)
        if (res.statusCode === 200) {
          console.log('✅ 获取收藏列表成功')
          resolve(res.data)
        } else {
          console.log('⚠️ 获取收藏列表失败:', res)
          reject(new Error('获取收藏列表失败'))
        }
      },
      fail: (err) => {
        console.error('❌ 收藏列表API网络错误:', err)
        reject(err)
      }
    })
  })
}

// 菜品评分 - 修复参数传递问题
export function rateDish(data) {
  const { dishId, rating } = data
  const userId = data.userId || 100
  
  console.log('⭐ 评分API调用:', { dishId, userId, rating })
  
  return new Promise((resolve, reject) => {
    // 参数验证
    if (!dishId || isNaN(dishId)) {
      reject(new Error('菜品ID无效'))
      return
    }
    if (!rating || isNaN(rating) || rating < 1 || rating > 5) {
      reject(new Error('评分必须是1-5之间的数字'))
      return
    }
    
    const requestData = { dishId: Number(dishId), userId: Number(userId), rating: Number(rating) }
    console.log('📤 发送评分数据:', requestData)
    
    uni.request({
      url: 'http://localhost:8080/diet/rate',
      method: 'POST',
      data: requestData,
      header: {
        'Content-Type': 'application/json'
      },
      success: (res) => {
        console.log('📥 评分API响应:', res)
        if (res.statusCode === 200 && res.data.code === 200) {
          console.log('✅ 评分成功')
          resolve(res.data)
        } else {
          console.log('⚠️ 评分失败:', res.data)
          reject(new Error(res.data.msg || '评分失败'))
        }
      },
      fail: (err) => {
        console.error('❌ 评分API网络错误:', err)
        reject(err)
      }
    })
  })
}

// 记录菜品点击行为 - 修复参数传递问题
export function recordClick(dishId, userId = 100) {
  console.log('👁️ 点击记录API调用:', { dishId, userId })
  
  return new Promise((resolve, reject) => {
    // 参数验证
    if (!dishId || isNaN(dishId)) {
      resolve({ msg: '菜品ID无效，跳过记录' })
      return
    }
    if (!userId || isNaN(userId)) {
      userId = 100
    }
    
    const requestData = { dishId: Number(dishId), userId: Number(userId) }
    console.log('📤 发送点击记录数据:', requestData)
    
    uni.request({
      url: 'http://localhost:8080/diet/click',
      method: 'POST',
      data: requestData,
      header: {
        'Content-Type': 'application/json'
      },
      success: (res) => {
        console.log('📥 点击记录API响应:', res)
        if (res.statusCode === 200 && res.data.code === 200) {
          console.log('✅ 点击记录成功')
          resolve(res.data)
        } else {
          console.log('⚠️ 点击记录失败:', res.data)
          resolve(res.data) // 不阻断主流程
        }
      },
      fail: (err) => {
        console.error('❌ 点击记录网络错误:', err)
        resolve({ msg: '网络错误' }) // 不阻断主流程
      }
    })
  })
}

// 获取用户评分列表
export function getUserRatingList(userId, pageNum = 1, pageSize = 10) {
  console.log('⭐ 获取评分列表API调用:', { userId, pageNum, pageSize })
  
  return new Promise((resolve, reject) => {
    if (!userId || isNaN(userId)) {
      userId = 100
    }
    
    const url = `http://localhost:8080/diet/ratings/${Number(userId)}?pageNum=${pageNum}&pageSize=${pageSize}`
    console.log('🔗 请求URL:', url)
    
    uni.request({
      url: url,
      method: 'GET',
      header: {
        'Content-Type': 'application/json'
      },
      success: (res) => {
        console.log('📥 评分列表API响应:', res)
        if (res.statusCode === 200) {
          console.log('✅ 获取评分列表成功')
          resolve(res.data)
        } else {
          console.log('⚠️ 获取评分列表失败:', res)
          reject(new Error('获取评分列表失败'))
        }
      },
      fail: (err) => {
        console.error('❌ 评分列表API网络错误:', err)
        reject(err)
      }
    })
  })
}

// 获取用户点击历史列表
export function getUserClickList(userId, pageNum = 1, pageSize = 10) {
  console.log('👁️ 获取点击历史API调用:', { userId, pageNum, pageSize })
  
  return new Promise((resolve, reject) => {
    if (!userId || isNaN(userId)) {
      userId = 100
    }
    
    const url = `http://localhost:8080/diet/clicks/${Number(userId)}?pageNum=${pageNum}&pageSize=${pageSize}`
    console.log('🔗 请求URL:', url)
    
    uni.request({
      url: url,
      method: 'GET',
      header: {
        'Content-Type': 'application/json'
      },
      success: (res) => {
        console.log('📥 点击历史API响应:', res)
        if (res.statusCode === 200) {
          console.log('✅ 获取点击历史成功')
          resolve(res.data)
        } else {
          console.log('⚠️ 获取点击历史失败:', res)
          reject(new Error('获取点击历史失败'))
        }
      },
      fail: (err) => {
        console.error('❌ 点击历史API网络错误:', err)
        reject(err)
      }
    })
  })
}

// 获取菜品详情
export function getDishDetail(dishId) {
  return request({
    url: `/diet/dish/${dishId}`,
    method: 'get'
  })
}

// 搜索菜品
export function searchDish(params) {
  return request({
    url: '/diet/search',
    method: 'get',
    params
  })
}

// 获取热门菜品
export function getHotDishes(params) {
  return request({
    url: '/diet/hot',
    method: 'get',
    params
  })
}

// 营养优化推荐
export function getOptimization(userId) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: `http://localhost:8000/optimize/${userId}`,
      method: 'GET',
      timeout: 30000,
      success: (res) => {
        console.log('⚖️ 营养优化API原始响应:', res)
        if (res.statusCode === 200) {
          resolve(res.data)
        } else {
          reject(new Error(`API错误: ${res.statusCode}`))
        }
      },
      fail: (err) => {
        console.error('⚖️ 营养优化API调用失败:', err)
        reject(err)
      }
    })
  })
}

// 获取用户对菜品的状态（收藏、评分）
export function getUserDishStatus(userId, dishIds) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: `http://localhost:8080/diet/status/${userId}`,
      method: 'POST',
      data: { dishIds: dishIds },
      header: {
        'Content-Type': 'application/json'
      },
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data)
        } else {
          reject(new Error(`API错误: ${res.statusCode}`))
        }
      },
      fail: (err) => {
        reject(err)
      }
    })
  })
}